home *** CD-ROM | disk | FTP | other *** search
/ PCGUIA 127 / PC Guia 127.iso / Software / Produtividade / OpenOffice.org 2.0.1 / openofficeorg4.cab / wrapper.py < prev    next >
Text File  |  2005-11-19  |  2KB  |  64 lines

  1. """curses.wrapper
  2.  
  3. Contains one function, wrapper(), which runs another function which
  4. should be the rest of your curses-based application.  If the
  5. application raises an exception, wrapper() will restore the terminal
  6. to a sane state so you can read the resulting traceback.
  7.  
  8. """
  9.  
  10. import sys, curses
  11.  
  12. def wrapper(func, *rest):
  13.     """Wrapper function that initializes curses and calls another function,
  14.     restoring normal keyboard/screen behavior on error.
  15.     The callable object 'func' is then passed the main window 'stdscr'
  16.     as its first argument, followed by any other arguments passed to
  17.     wrapper().
  18.     """
  19.  
  20.     res = None
  21.     try:
  22.         # Initialize curses
  23.         stdscr=curses.initscr()
  24.  
  25.         # Turn off echoing of keys, and enter cbreak mode,
  26.         # where no buffering is performed on keyboard input
  27.         curses.noecho()
  28.         curses.cbreak()
  29.  
  30.         # In keypad mode, escape sequences for special keys
  31.         # (like the cursor keys) will be interpreted and
  32.         # a special value like curses.KEY_LEFT will be returned
  33.         stdscr.keypad(1)
  34.  
  35.         # Start color, too.  Harmless if the terminal doesn't have
  36.         # color; user can test with has_color() later on.  The try/catch
  37.         # works around a minor bit of over-conscientiousness in the curses
  38.         # module -- the error return from C start_color() is ignorable.
  39.         try:
  40.             curses.start_color()
  41.         except:
  42.             pass
  43.  
  44.         res = func(stdscr, *rest)
  45.     except:
  46.         # In the event of an error, restore the terminal
  47.         # to a sane state.
  48.         stdscr.keypad(0)
  49.         curses.echo()
  50.         curses.nocbreak()
  51.         curses.endwin()
  52.  
  53.         # Pass the exception upwards
  54.         (exc_type, exc_value, exc_traceback) = sys.exc_info()
  55.         raise exc_type, exc_value, exc_traceback
  56.     else:
  57.         # Set everything back to normal
  58.         stdscr.keypad(0)
  59.         curses.echo()
  60.         curses.nocbreak()
  61.         curses.endwin()          # Terminate curses
  62.  
  63.         return res
  64.